#include <iostream>

#include "SortTestHelper.h"
#include "InsertionSort.h"
#include "MergeSort.h"
#include "SelectionSort.h"

using namespace std;

int main() {
    // 选择排序
    int n = 50000;
    int* arr = SortTestHelper::generateAlmostOrderArray(n,25000);
    int* arr2 = SortTestHelper::copyArry(arr,n);
    int* arr3 = SortTestHelper::copyArry(arr,n);
    int* arr4 = SortTestHelper::copyArry(arr,n);
    int* arr5 = SortTestHelper::copyArry(arr,n);


    // 选择排序
    SortTestHelper::testSort("selectionSort \t\t",SelectionSort::selectionSort,arr,n);
    // 插入排序
    SortTestHelper::testSort("insertionSort \t\t",InsertionSort::insertionSort,arr2,n);
    // 优化的插入排序
    SortTestHelper::testSort("insertionSortOpt \t",InsertionSort::insertionSortOpt,arr3,n);
    // 归并排序
    SortTestHelper::testSort("mergeSort \t\t\t",MergeSort::mergeSort,arr4,n - 1);
    // 优化的归并排序
    SortTestHelper::testSort("mergeSortOpt \t\t",MergeSort::mergeSortOpt,arr4,n - 1);
    // 优化的归并排序
    SortTestHelper::testSort("mergeSortOptWithInsert ",MergeSort::mergeSortOptWithInsert,arr5,n - 1);


    // 释放内存
    delete[] arr;
    delete[] arr2;
    delete[] arr3;
    delete[] arr4;
    delete[] arr5;


    return 0;
}